package com.aliyun.messagemgt.application.service.utils;

import com.aliyun.messagemgt.common.dto.send.MsgBody;
import com.aliyun.messagemgt.common.constants.ContentTypeConstant;
import com.aliyun.messagemgt.common.enums.MediaLimitEnum;
import org.apache.commons.lang3.StringUtils;

import java.util.HashMap;
import java.util.Map;

/**
 * Created with IDEA
 * 通过url获得文件类型
 *
 * @author:zhangxingxing 0027012120
 * @date:2019/2/15
 * @time:15:59
 */
public class MediaTypeUtil {

    /**
     * 类型获取方式
     * <p>
     * 1. 判断content-type是否存在
     * 2. 判断 MsgBody 的 type 是否和 content-type 一致
     * 3. 判断 content-type 是否合法，并获得类型，如 png
     *  文件另算
     *
     * @param msgBody     用户设置的消息体
     * @param contentType 实际消息类型，从connection获得
     * @return 多媒体类型，如果是错误的情况则返回 null
     */
    public static String getType(MsgBody msgBody, String contentType) {
        if (StringUtils.isEmpty(msgBody.getType()) || StringUtils.isEmpty(contentType)) {
            return null;
        }

        Map<String, String> checkMap = new HashMap<>(8);
        checkMap.put(MediaLimitEnum.IMAGE.name(), "image");
        checkMap.put(MediaLimitEnum.VOICE.name(), "audio");
        checkMap.put(MediaLimitEnum.VIDEO.name(), "video");
        // FILE也需要算进去，如果要支持微信推送
        checkMap.put(MediaLimitEnum.FILE.name(), "application");

        String newContentType = null;
        String type = null;
        if (contentType.contains("/")) {
            String[] contentTypeSplit = contentType.split("/");
            newContentType = contentTypeSplit[0].toLowerCase();
            type = contentTypeSplit[1].toLowerCase();
        } else {
            return null;
        }

        if (!newContentType.equals(checkMap.get(msgBody.getType()))) {
            return null;
        }

        // 查看type是否符合要求
        if (MediaLimitEnum.IMAGE.name().equals(msgBody.getType())) {
            if (!ContentTypeConstant.IMAGE_SET.contains(type)) {
                return null;
            }
        } else if (MediaLimitEnum.VOICE.name().equals(msgBody.getType())) {
            if (!ContentTypeConstant.VOICE_SET.contains(type)) {
                return null;
            }
        } else if (MediaLimitEnum.VIDEO.name().equals(msgBody.getType())) {
            if (!ContentTypeConstant.VIDEO_SET.contains(type)) {
                return null;
            }
        }

        return type;
    }

    /**
     * 扩展其他类型
     * 通过固定的类型获取数据格式
     *
     * @param msgBody
     * @return
     */
    private static String getTypeByFixation(MsgBody msgBody) {
        String result = null;
        if (!StringUtils.isEmpty(msgBody.getType()) && msgBody.getType().contains("/")) {
            result = msgBody.getType().split("/")[1];
            msgBody.setType(msgBody.getType().split("/")[0]);
        } else if (MediaLimitEnum.IMAGE.name().equalsIgnoreCase(msgBody.getType())) {
            result = "png";
        }
        return result;
    }
}
